#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//转移表
//typedef void(*hanp)(int,int);
//int main()
//{
//	hanp p;
//
//	return 0;
//}



//题目训练1:删除链表中的指定元素
//struct ListNode {
//    int val;
//    struct ListNode* next;
//};
//typedef struct ListNode ListNode;
//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//    ListNode* newHead = NULL;
//    ListNode* newTail = NULL;
//    ListNode* pcur = head;
//    while (pcur)
//    {
//        if (pcur->val != val)
//        {
//            if (newHead == NULL)
//            {
//                newHead = pcur;
//                newTail = pcur;
//            }
//            else {
//                newTail->next = pcur;
//                newTail = pcur;
//            }
//        }
//        pcur = pcur->next;
//    }
//    if (newTail != NULL)
//    {
//        newTail->next = NULL;
//    }
//    return newHead;
//}
////节点的创建，创建一个顺序表
//int main()
//{
//    ListNode* node1 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node2 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node3 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node4 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node5 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node6 = (ListNode*)malloc(sizeof(ListNode));
//    ListNode* node7 = (ListNode*)malloc(sizeof(ListNode));
//
//    node1->val = 1;
//    node2->val = 2;
//    node3->val = 6;
//    node4->val = 3;
//    node5->val = 4;
//    node6->val = 5;
//    node7->val = 6;
//
//    node1->next = node2;
//    node2->next = node3;
//    node3->next = node4;
//    node4->next = node5;
//    node5->next = node6;
//    node6->next = node7;
//    node7->next = NULL;
//
//    ListNode* plist = node1;
//    ListNode* phead = removeElements(plist,6);
//    return 0;
//}
//题目训练2:反转链表
//方法一：头插
//typedef struct ListNode ListNode;
//struct ListNode {
//	int val;
//	struct ListNode* next;
//};
//struct ListNode* reverseList(struct ListNode* head) 
//{
//	ListNode* phead = NULL;
//	ListNode* pcur = head;
//	while (pcur)
//	{
//		if (phead == NULL)
//		{
//			phead = pcur;
//			pcur = pcur->next;
//			phead->next = NULL;
//		}
//		else {
//			ListNode* Middle = phead;
//			phead = pcur;
//			pcur = pcur->next;
//			phead->next = Middle;
//		}
//	}
//	return phead;
//}
//	
//int main()
//{
//	ListNode* node1 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node2 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node3 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node4 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node5 = (ListNode*)malloc(sizeof(ListNode));
//
//	node1->val = 1;
//	node2->val = 2;
//	node3->val = 3;
//	node4->val = 4;
//	node5->val = 5;
//
//	node1->next = node2;
//	node2->next = node3;
//	node3->next = node4;
//	node4->next = node5;
//	node5->next = NULL ;
//
//	ListNode* pphead = reverseList(node1);
//    return 0;
//}
//方法二：借助三个指针完成
//typedef struct ListNode ListNode;
//struct ListNode {
//	int val;
//	struct ListNode* next;
//};
//struct ListNode* reverseList(struct ListNode* head)
//{
//	ListNode* n1 = NULL;
//	ListNode* n2 = head;
//	ListNode* n3 = head->next;
//	while (n2)
//	{
//		n2->next = n1;
//		n1 = n2;
//		n2 = n3;
//		if (n3 != NULL)
//		{
//			n3 = n3->next;
//		}
//	}
//	return n1;
//}
//int main()
//{
//	ListNode* node1 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node2 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node3 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node4 = (ListNode*)malloc(sizeof(ListNode));
//	ListNode* node5 = (ListNode*)malloc(sizeof(ListNode));
//
//	node1->val = 1;
//	node2->val = 2;
//	node3->val = 3;
//	node4->val = 4;
//	node5->val = 5;
//
//	node1->next = node2;
//	node2->next = node3;
//	node3->next = node4;
//	node4->next = node5;
//	node5->next = NULL ;
//
//	ListNode* pphead = reverseList(node1);
//    return 0;
//}
//题目训练三：寻找中间节点
//方法一：先计算器遍历，再找中间节点
//int main1()
//{
//	int count = 1;
//	ListNode* head;
//	while (head)
//	{
//		head = head->next;
//		count++ ;
//	}
//	int mid = count / 2;
//	while(count--)
//	{
//		head = head->next;
//	}
//
//	return head;
//}
//方法二：快慢指针
//int Middle(ListNode* head)
//{
//	ListNode* slow = head;
//	ListNode* fast = head;
//	while (fast && fast->next)
//	{
//		slow = slow->next;
//		fast = fast->next->next;
//	}
//	return slow;
//
//}
//题目训练四：合并两个有序链表
int hebing()
{


}